﻿Imports System.Xml

Namespace Objects

    Public Class PrintTicketDocument
        Inherits PrintVerkoopDocument

        Protected _betaald As Decimal

        Protected Overrides ReadOnly Property FooterLineCount() As Integer
            Get
                Return 3
            End Get
        End Property

        Protected Overrides ReadOnly Property NaamSjabloon() As String
            Get
                Return "ticket.flo"
            End Get
        End Property

        Public Sub New(ByVal details As List(Of VerkoopsDetail), _
                ByVal winkelier As String, ByVal teBetalen As Decimal, ByVal betaald As Decimal)
            MyBase.New(details, winkelier, teBetalen)
            _betaald = betaald
        End Sub

        Protected Overrides Sub InitializePrinter()
            Me.PrinterSettings.PrinterName = Configuratie.TicketPrinter
        End Sub

        Protected Overrides Function GetVerkoopsPrintDetail(ByVal detail As VerkoopsDetail, ByVal volgnummerKlant As String) As PrintVerkoopDocument.VerkoopsPrintDetail
            Return New TicketDetail(detail, Me, volgnummerKlant)
        End Function

        ''' <summary>
        ''' 
        ''' </summary>
        ''' <param name="top">Bovenkantpositie vanaf waar geprint moet worden</param>
        ''' <returns>Bovenkant-positie van de volgende rij in dpi</returns>
        Protected Overrides Function PrintHoofding(ByVal top As Integer) As Integer
            Dim hoofdingBlok As DocumentBlok = GetBlok("hoofding")
            hoofdingBlok.SetCelTekst("datum", String.Format("{0:d/M/yyyy HH:mm}", _datum) & GetTitleSuffix())
            hoofdingBlok.SetCelTekst("winkelier", String.Format("Winkelier: {0}", _naamWinkelier))
            top = PrintBlok(hoofdingBlok, top)
            Return top
        End Function

        Protected Overrides Function PrintVervolgHoofding(ByVal top As Integer) As Integer
            Return top ' niets doen, tickets worden altijd op 1 "pagina" afgedrukt
        End Function

        Protected Overrides Sub PrintVoettekst(ByVal top As Integer)
            Dim totaalBlok As DocumentBlok = GetBlok("totaal")
            totaalBlok.SetCelTekst("totaal", _totaalBedrag.ToString("c"))
            totaalBlok.SetCelTekst("betaald", _betaald.ToString("c"))
            Dim teruggave As Decimal = _betaald - _totaalBedrag
            If (teruggave < 0) Then ' bijvoorbeeld voor tussendoor
                totaalBlok.SetCelTekst("labelteruggave", "Nog te betalen:")
                teruggave = -teruggave
            End If
            totaalBlok.SetCelTekst("teruggave", teruggave.ToString("c"))
            top = PrintBlok(totaalBlok, top)

            Dim voettekstBlok As DocumentBlok = GetBlok("voettekst")
            voettekstBlok.SetCelTekst("voettekstopticket", Configuratie.TekstOpTicket)
            top = PrintBlok(voettekstBlok, top)

            Dim witruimteBlok As DocumentBlok = GetBlok("witruimte")
            top = PrintBlok(witruimteBlok, top) ' nog enkele lege rijen zodat kasticket niet net onder totaal afgesneden wordt
        End Sub

        Protected Overrides Function ShouldPrintPageNumber() As Boolean
            Return False
        End Function

        Protected Class TicketDetail
            Inherits VerkoopsPrintDetail

            Public Sub New(ByVal verkoopsDetail As VerkoopsDetail, ByVal document As PrintTicketDocument, ByVal volgnummerKlant As String)
                MyBase.New(verkoopsDetail, document, volgnummerKlant)
            End Sub

            ''' <summary>
            ''' 
            ''' </summary>
            ''' <param name="top">Bovenkant vanaf waar geprint moet worden</param>
            ''' <returns>Bovenkant-positie van de volgende rij in dpi</returns>
            Public Overrides Function Print(ByVal sjabloonRij As DocumentRij, ByVal top As Integer) As Integer

                If (_verkoopsDetail.PrijsZonderStatiegeld <> 0D) Then
                    sjabloonRij.SetCelTekst("omschrijving", _verkoopsDetail.Omschrijving)
                    sjabloonRij.SetCelTekst("prijs", _verkoopsDetail.PrijsZonderStatiegeld.ToString("c"))
                    sjabloonRij.SetCelTekst("aantal", String.Format("x {0} =", _verkoopsDetail.Aantal))
                    sjabloonRij.SetCelTekst("totaal", _verkoopsDetail.TotaalPrijsZonderStatiegeld.ToString("c"))
                    top = _document.PrintRij(sjabloonRij, top)
                End If

                If (_verkoopsDetail.AfTeDrukkenStatiegeldPerStuk <> 0D) Then
                    If (_verkoopsDetail.TotaalPrijsZonderStatiegeld = 0D) Then
                        sjabloonRij.SetCelTekst("omschrijving", _verkoopsDetail.Omschrijving)
                    Else
                        sjabloonRij.SetCelTekst("omschrijving", "Leeggoed " & _verkoopsDetail.Omschrijving)
                    End If
                    sjabloonRij.SetCelTekst("prijs", _verkoopsDetail.AfTeDrukkenStatiegeldPerStuk.ToString("c"))
                    sjabloonRij.SetCelTekst("aantal", String.Format("x {0} =", _verkoopsDetail.Aantal))
                    sjabloonRij.SetCelTekst("totaal", _verkoopsDetail.TotaalAfTeDrukkenStatiegeld.ToString("c"))
                    top = _document.PrintRij(sjabloonRij, top)
                End If

                If (_verkoopsDetail.Omschrijving.ToLower().StartsWith("voorschot")) Then
                    top = _document.PrintBarcode(_verkoopsDetail.Barcode, top)
                End If

                Return top

            End Function

        End Class

    End Class

End Namespace
